// Copyright 2019-present the Flutter authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import 'package:flutter/material.dart';

import 'package:flutter_gallery/demo/rally/colors.dart';
import 'package:flutter_gallery/demo/rally/home.dart';
import 'package:flutter_gallery/demo/rally/login.dart';

/// The RallyApp is a MaterialApp with a theme and 2 routes.
///
/// The home route is the main page with tabs for sub pages.
/// The login route is the initial route.
class RallyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Rally',
      theme: _buildRallyTheme(),
      home: HomePage(),
      initialRoute: '/login',
      routes: <String, WidgetBuilder>{
        '/login': (BuildContext context) => LoginPage(),
      },
    );
  }

  ThemeData _buildRallyTheme() {
    final ThemeData base = ThemeData.dark();
    return ThemeData(
      scaffoldBackgroundColor: RallyColors.primaryBackground,
      primaryColor: RallyColors.primaryBackground,
      textTheme: _buildRallyTextTheme(base.textTheme),
      inputDecorationTheme: InputDecorationTheme(
        labelStyle: const TextStyle(
          color: RallyColors.gray,
          fontWeight: FontWeight.w500,
        ),
        filled: true,
        fillColor: RallyColors.inputBackground,
        focusedBorder: InputBorder.none,
      ),
    );
  }

  TextTheme _buildRallyTextTheme(TextTheme base) {
    return base
      .copyWith(
        body1: base.body1.copyWith(
          fontFamily: 'Roboto Condensed',
          fontSize: 14,
          fontWeight: FontWeight.w400,
        ),
        body2: base.body2.copyWith(
          fontFamily: 'Eczar',
          fontSize: 40,
          fontWeight: FontWeight.w400,
          letterSpacing: 1.4,
        ),
        button: base.button.copyWith(
          fontFamily: 'Roboto Condensed',
          fontWeight: FontWeight.w700,
          letterSpacing: 2.8,
        ),
        headline: base.body2.copyWith(
          fontFamily: 'Eczar',
          fontSize: 40,
          fontWeight: FontWeight.w600,
          letterSpacing: 1.4,
        ),
      )
      .apply(
        displayColor: Colors.white,
        bodyColor: Colors.white,
      );
  }
}
